package com.itheima.mm.service.impl;

import com.itheima.mm.constants.Constants;
import com.itheima.mm.dao.CourseDao;
import com.itheima.mm.entity.PageResult;
import com.itheima.mm.entity.QueryPageBean;
import com.itheima.mm.pojo.Course;
import com.itheima.mm.service.ICourseService;
import com.itheima.mm.utils.JedisUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import redis.clients.jedis.Jedis;

import java.io.IOException;
import java.util.List;

/**
 * 包名:com.itheima.mm.service
 * 作者:Leevi
 * 日期2020-01-15  11:23
 */
@Service
public class CourseService implements ICourseService {
    @Autowired
    private CourseDao courseDao;
    @Override
    public void add(Course course) throws IOException {
        courseDao.add(course);
        delRedisCourseList();
    }

    /**
     * 分页查询的方法
     * @param queryPageBean
     * @return
     */
    @Override
    public PageResult findByPage(QueryPageBean queryPageBean) throws IOException {
        //1. 调用dao层的方法，获取总学科数量total
        Long total = courseDao.getTotal(queryPageBean);//获取学科总数

        //2. 调用dao层的方法，获取当前页的学科集合rows
        List<Course> rows = courseDao.findPageList(queryPageBean);
        return new PageResult(total,rows);
    }

    @Override
    public void update(Course course) throws IOException {
        courseDao.update(course);
        delRedisCourseList();
    }

    @Override
    public void deleteById(Integer id) throws IOException {
        //1. 判断当前学科下有没有二级目录
        Long catalogCount = courseDao.findCatalogCountByCourseId(id);
        if (catalogCount == 0) {
            //说明没有二级目录
            //2. 判断当前学科下有没有标签
            Long tagCount = courseDao.findTagCountByCourseId(id);
            if (tagCount == 0) {
                //说明没有标签
                //3. 判断当前学科下有没有题目
                Long questionCount = courseDao.findQuestionCountByCourseId(id);
                if (questionCount == 0) {
                    //没有题目
                    //如果都没有，则调用dao层的方法删除
                    courseDao.deleteById(id);
                    delRedisCourseList();
                }else {
                    //有题目，不能删除
                    throw new RuntimeException("学科下有题目，删除失败");
                }
            }else {
                //有标签，不能删除
                throw new RuntimeException("学科下有标签，删除失败");
            }
        }else {
            //有二级目录，不能删除
            throw new RuntimeException("学科下有二级目录，删除失败");
        }
    }

    @Override
    public void delRedisCourseList() throws IOException {
        //还会学习，SpringBoot整合jedis
        //需要使用到Jedis
        Jedis jedis = JedisUtils.getJedis();

        //直接删除redis中的数据
        jedis.del(Constants.COURSE_LIST_KEY);

        jedis.close();
    }

    @Override
    public List<Course> findAll(Integer status) throws IOException {

        return courseDao.findAll(status);
    }
}
